package com.starlinkdt.common.storage;

import com.aliyuncs.exceptions.ClientException;

import java.io.IOException;
import java.util.Map;

/**
 * 对象存储类接口
 *
 * @author system
 */
public interface StorageInterface {
    /**
     * 获取STS临时令牌
     *
     * @return Map
     */
    Map<String, Object> genStsToken() throws ClientException;

    /**
     * 上传Byte数组
     *
     * @param objectName 对象路径及名称
     * @param objectContent byte数组
     */
    void putObjectByte(String objectName, byte[] objectContent) throws IOException;

    /**
     * 上传网络流
     *
     * @param objectName 对象路径及名称
     * @param fileUrl 待上传的网络文件地址
     */
    void putObjectUrl(String objectName, String fileUrl) throws IOException;

    /**
     * 上传文件流
     *
     * @param objectName 对象路径及名称
     * @param filePath 待上传的本地文件路径,需要指定到具体的文件名
     */
    void putObjectFile(String objectName, String filePath) throws IOException;

    /**
     * 判断文件是否存在
     *
     * @param objectName 对象路径及名称
     * @return boolean
     */
    boolean existObject(String objectName);

    /**
     * 获取签名URL
     *
     * @param objectName 对象路径及名称
     * @return String
     */
    String getObjectSignUrl(String objectName);

    /**
     * 下载文件流
     *
     * @param objectName 对象路径及名称
     * @return byte
     */
    byte[] downloadObjectStream(String objectName) throws IOException;

    /**
     * 删除文件
     *
     * @param objectName 对象路径及名称
     */
    void deleteObject(String objectName);

}
